package com.xuan.mail.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xuan.mail.domin.Email;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xuan.mail.domin.Folderm;
import com.xuan.mail.domin.User;

import java.util.List;

/**
* @author 86156
* @description 针对表【email】的数据库操作Service
* @createDate 2024-03-15 14:20:38
*/
public interface EmailService extends IService<Email> {
    void clearEmail();
    //查询列表
    //通过文件夹id获取邮箱
    List<Email> getEmailListByFolderId(Integer folderId);
    //通过邮箱id查询邮箱所在文件夹
    Folderm getFolderByEmailId(Integer emailId);

    //获得邮件列表
//    IPage<Email> getEmailList(Integer pageNum, Integer pageSize, Integer folderId);

    //分页查询列表
    Page<Email> getEmailListFolder( Integer folderId,Integer userId,Integer pageNum,Integer pageSize);

    long countUnreadEmails(Integer folderId,Integer userId);

    void allRead(Integer folderId,Integer userId);

    void allStarRead(Integer userId);

    //创建草稿邮件
    void createDraftEmail(Email email);

    // 发送邮件的方法
    void sendEmail(Integer emailId);
    //定时接收邮件

    public void fetchEmails() ;
    void receiveEmail(User user) ;
    //逻辑删除邮件
    void logicdeleteEmail(Integer emailId);
    //恢复邮件
    void recoverEmail(Integer emailId);
    //物理删除邮件
    void deleteEmail(Integer emailId);
    //移动邮件到另一个文件夹
    void moveEmail(Integer emailId,Integer folderId);
    //更改邮件标签tag
    void changeEmailTag(Integer emailId,Integer tagId);
    //星标邮件
    public void starEmail(Integer emailId);
    //取消星标邮件
    public void unStarEmail(Integer emailId);
    //已读邮件
    public void readEmail(Integer emailId);
    //未读邮件
    public void unReadEmail(Integer emailId);

    List<Folderm> getFolder();

    Email getEmailContent(Integer emailId);

    void updateDraftEmail(Email email);

    Page<Email> getStarEmailList(Integer userId,Integer pageNum, Integer pageSize);

    Page<Email> searchEmail(Integer userId,String keyword,Integer pageNum,Integer pageSize);

    long countStarUnreadEmails(Integer userId);
    //获取星标邮件
//    public List<Email> getStarEmail();
//    //获取垃圾邮件
//    public List<Email> getRubbishEmail();


}
